#include "v2p.h"
#include <stdint.h>
#include <stdio.h>
// 模拟页表（在真实情况下，这会在内存中）
uint32_t page_table[] = {
  0x20000000, // 第一个虚拟页映射到物理页帧基地址 0x20000000
  0x20001000, // 第二个虚拟页映射到物理页帧基地址 0x20001000
  0x20002000, // 第三个虚拟页映射到物理页帧基地址 0x20002000
  0x20003000  // 第四个虚拟页映射到物理页帧基地址 0x20003000
};

uint32_t
translate_address (uint32_t virtual_address)
{
    // 页大小为4KB，即2的12次方
    const uint32_t page_size = 4096; 
    // 计算虚拟地址所在的页号
    uint32_t page_number = virtual_address / page_size; 
    // 计算页内偏移量
    uint32_t offset = virtual_address % page_size; 
    // 根据页号从页表中获取物理页帧基地址
    uint32_t physical_page_base = page_table[page_number]; 
    // 计算物理地址
    uint32_t physical_address = physical_page_base + offset; 
    return physical_address;
}
